package vip.liux.contracts.security.core.extensions;

/**
 * 提供用于存储用户密码哈希的抽象接口。
 *
 * @param <TUser> 封装用户的类型。
 */
public interface IUserPasswordStore<TUser> extends IUserStore<TUser> {
    /**
     * 设置指定用户的密码哈希。
     *
     * @param user         要设置的用户。
     * @param passwordHash 密码哈希。
     */
    void setPasswordHash(TUser user, String passwordHash);

    /**
     * 获取指定用户的密码哈希。
     *
     * @param user 要查询的用户。
     * @return 密码哈希，若无则为 Optional.empty()。
     */
    String getPasswordHash(TUser user);

    /**
     * 判断指定用户是否有密码。
     *
     * @param user 要查询的用户。
     * @return 如果有密码返回 true，否则返回 false。
     */
    boolean hasPassword(TUser user);
}